package pe.edu.unmsm.fiee.sispagos.presentacion.controller.reportes;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.faces.context.FacesContext;
import javax.faces.event.AjaxBehaviorEvent;
import javax.servlet.http.HttpSession;

import org.primefaces.model.chart.CartesianChartModel;
import org.primefaces.model.chart.ChartSeries;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import pe.edu.unmsm.fiee.sispagos.negocio.modelo.ChartConsolidadoCptoDTO;
import pe.edu.unmsm.fiee.sispagos.negocio.servicio.VoucherPagoService;

@Controller
@Scope("view")
public class EstadisticaController {

	private Integer anioSeleccionado;
	private Integer mesSeleccionado;
	private CartesianChartModel barraConceptos;
	private List<ChartConsolidadoCptoDTO> cptos;
    private CartesianChartModel categoryModel;  
	
	@Resource
	VoucherPagoService voucherPagoService;

	@PostConstruct
	private void init(){
		HttpSession session=(HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(true);
		setAnioSeleccionado((Integer)session.getAttribute("anioSeleccionado"));
		setMesSeleccionado((Integer)session.getAttribute("mesSeleccionado"));
//////////////////////////////////////////////////////////////////
		cargarChartConsolidadosCptos(getAnioSeleccionado(), getMesSeleccionado());
	}

	private void cargarChartConsolidadosCptos(Integer anio, Integer mes) {
		categoryModel = new CartesianChartModel();  
        
        setCptos(voucherPagoService.listarConsolidadosCptosxAnioMes(anio, mes));
        ChartSeries boys = new ChartSeries();  
        boys.setLabel("Conceptos de Pagos");  
        if (getCptos().size()>0) {

            for (ChartConsolidadoCptoDTO consolCpto : getCptos()) {
    			boys.set(consolCpto.getCodigoConceptoPago(), consolCpto.getMontoTotal());
    		}
            		
		}else
		{
			boys.set("No hay ingresos", 0);
		}
        categoryModel.addSeries(boys);	
	}
	
	public void cargarChartAjax(AjaxBehaviorEvent aev){
		cargarChartConsolidadosCptos(getAnioSeleccionado(), getMesSeleccionado());
	}

	/************************GETTERS AND SETTERS*************************/
	public CartesianChartModel getBarraConceptos() {
		return barraConceptos;
	}

	public void setBarraConceptos(CartesianChartModel barraConceptos) {
		this.barraConceptos = barraConceptos;
	}

	public List<ChartConsolidadoCptoDTO> getCptos() {
		return cptos;
	}

	public void setCptos(List<ChartConsolidadoCptoDTO> cptos) {
		this.cptos = cptos;
	}

	public Integer getAnioSeleccionado() {
		return anioSeleccionado;
	}

	public void setAnioSeleccionado(Integer anioSeleccionado) {
		this.anioSeleccionado = anioSeleccionado;
	}

	public Integer getMesSeleccionado() {
		return mesSeleccionado;
	}

	public void setMesSeleccionado(Integer mesSeleccionado) {
		this.mesSeleccionado = mesSeleccionado;
	}

	public CartesianChartModel getCategoryModel() {
		return categoryModel;
	}

	public void setCategoryModel(CartesianChartModel categoryModel) {
		this.categoryModel = categoryModel;
	} 
	
}
